跳到主要内容

什么是低秩适配(LoRA)技术?如何结合 LoRA 技术进行微调?

LoRA(Low-Rank Adaptation,低秩适配) 是 PEFT(参数高效微调) 的主流做法:冻结预训练大模型权重,只训练旁路低秩矩阵,用少量数据与算力适配下游任务。本篇讲面试答法;与 RAG 分工见 RAG 与检索增强 微调边界一节。

LoRA 是什么​

全量微调要更新模型全部参数(7B 即 70 亿),显存与存储成本高。LoRA 假设:任务相关的权重更新具有低秩结构——可用两个小矩阵的乘积近似。

对某线性层权重 W(维度 d×k),LoRA 不直接改 W,而是:

W' = W + ΔW = W + B · A

B ∈ R^{d×r},A ∈ R^{r×k},秩 r ≪ min(d, k)

前向时:

h = W·x + (α/r) · B·A·x
符号含义
W预训练权重,冻结
A、B可训练低秩适配器,参数量约 r×(d+k)
r(rank)秩,常见 8~64;越大表达能力越强、参数越多
α(lora_alpha)缩放系数,常设 α = 2r 或与 r 同量级

推理时 可将 BA 合并进 W(merge),对外仍是一个模型;或多 LoRA 适配器按任务 热切换(不 merge,加载 adapter)。

面试一句话:LoRA = 冻结底座 + 训练小矩阵 B、A,近似全量微调的 ΔW,省显存、可插拔。

为什么用 LoRA​

对比全量微调LoRA
可训练参数100%通常 0.1%~1%
显存高(存 optimizer 状态)低;配合 QLoRA 更低
存储每任务一份完整模型每任务一份 adapter(MB 级)
多任务多份大 checkpoint一底座 + 多 adapter
灾难性遗忘风险较高底座不动,相对可控

LoRA 属于 PEFT 家族;面试常一起提 Adapter、Prefix Tuning、Prompt Tuning——LoRA 在 LLM 工程里最常见、生态最好(Hugging Face PEFT、LLaMA-Factory、Unsloth 等)。

与 RAG / Prompt 怎么分工​

手段更适合
RAG知识常变、要可引用、要可撤回
Prompt轻量格式约束、快速试验
LoRA / SFT稳定风格、格式、领域话术、工具调用模式、分类路由
RLHF / DPO偏好对齐、安全、减少有害输出

常见组合:知识走 RAG,行为走 LoRA;或 LoRA 学「怎么用好检索结果」的模板,事实仍靠检索。详见 RAG 与检索增强。

如何结合 LoRA 做微调(工程流程)​

1. 选底座模型(开源权重 + 许可证)
2. 准备数据(instruction / chat JSONL,清洗与去重)
3. 定任务与验收(格式?分类?对话风格?)
4. 配 LoRA 超参 + 训练(SFT;可选 DPO)
5. 离线评测 vs 基座 / vs Prompt-only
6. 部署:merge 或 adapter 热加载;版本与回滚

1. 数据​

类型格式用途
SFTinstruction / input / output 字段或 ShareGPT 多轮教格式、话术、任务
偏好chosen / rejected 对DPO / RLHF 对齐
Agent轨迹(tool call 序列)学工具调用模式

质量 > 数量:几百条高质量往往胜过万条噪声;与 [AI 应用测试与效果评估](/docs/ai/Agent/面试/AI 应用测试与效果评估) 共用评测集思路。

2. 挂哪些层(target_modules)​

常见只对 Attention 的 q/v(有时 k/o) 或 MLP 的 linear 加 LoRA:

# Hugging Face PEFT 示意
from peft import LoraConfig, get_peft_model

config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"], # 模型架构不同名字不同
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM",
)
model = get_peft_model(base_model, config)
# 仅 LoRA 参数 requires_grad=True
选择说明
只 q/v参数更少,很多任务够用
q/k/v/o + MLP表达能力更强,显存升
全 linear接近「大力出奇迹」,慎用

3. 关键超参​

超参直觉
r8~16 起步;任务复杂可 32~64
lora_alpha常 2r;与 r 一起决定 adapter 缩放
learning rate比全量微调大一个量级常见(如 1e-4~2e-4)
epochs / steps小数据防过拟合,早停
batch + 累积受显存限制;QLoRA 用 4bit 底座

4. QLoRA(面试常追问)​

QLoRA = 4bit 量化底座 + LoRA 训练 adapter:

  • 底座以 NF4 等格式加载,显存大幅下降
  • 只训练 LoRA 权重为 fp16/bf16
  • 适合单卡微调 7B~70B 的消费级场景

5. 训练栈(点到为止)​

工具说明
Hugging Face PEFT + TRL标准组合
LLaMA-Factory / Axolotl配置化 SFT/LoRA
Unsloth加速 LoRA 训练

不必背 API;面试说清 PEFT 包一层、只优化 adapter 即可。

6. 推理部署​

方式说明
Adapter 热加载一底座 + load_adapter("customer-a") 切换
Merge 权重merge_and_unload() 导出单文件,部署简单
多 LoRA 批处理vLLM / S-LoRA 等 serving 优化

版本管理:adapter 与底座版本、训练数据 hash 一起记录,便于回滚。

常见坑​

坑说明
用 LoRA 灌知识事实常变应 RAG;LoRA 易过拟合、难更新
r 过大 + 数据少过拟合、泛化差
不评测基线应先比 Prompt-only / RAG-only
target_modules 写错训练跑通但 adapter 未挂到层上
忽略许可证底座与商用限制

面试参考答法(60~90 秒)​

LoRA 是低秩适配:冻结预训练权重 W,只训练 B、A 使 ΔW≈BA,前向是 Wx 加缩放后的 BAx。秩 r 远小于原矩阵维度,可训练参数通常不到 1%,显存和存储都省,一个底座可挂多个 adapter。

结合微调时,我先定任务——风格、格式、工具调用模式适合 LoRA;易变知识用 RAG。数据用 instruction 或对话 JSONL,清洗后 SFT;用 PEFT 指定 target_modules 如 q_proj/v_proj,设 r、alpha、学习率。显存紧用 QLoRA 4bit 底座。训完用 held-out 集对比基座,再决定 merge 还是 adapter 部署。

和 RAG 是叠加关系:RAG 供事实,LoRA 学怎么用、怎么答。

延伸阅读​

篇关系
RAG 与检索增强RAG vs 微调边界
RAG 与框架选型何时上 RAG 而非训模型
[AI 应用测试与效果评估](/docs/ai/Agent/面试/AI 应用测试与效果评估)微调效果评测

面试速记​

  1. LoRA 是什么: ΔW=BA 低秩近似;冻结 W,只训 B、A;推理可 merge。
  2. 为何用: 参数/显存省、多任务多 adapter、PEFT 主流方案。
  3. 流程: 数据 → SFT → PEFT 挂层 → 训 → 评测 → merge 或热加载。
  4. 关键超参: r、alpha、target_modules、lr;显存紧用 QLoRA。
  5. 与 RAG: 知识用 RAG,行为/格式用 LoRA;别用 LoRA 替代知识库。